Pokey Interrupts

← Zurück zum Forum

Hi,

ich spiele gerade ein wenig mit den Pokey-Interrupts des Atari rum. Ich habe gedacht, statt die Musikroutinen nur im VBI alle 1/50s aufzurufen, warum nicht die Pokey Interrupts nehmen und z.B. alle 1/100s die Musikroutinen aufrufen.

Grund: Änderungen in der Musik kämen schneller, das klingt nochmal viel besser. Beispiel, ein schönes Plopp in Turbo-Basic:

  FOR I=15 TO 0 STEP -1
    SOUND 0,35,10,I
  NEXT I

Wenn man das versucht mit Änderungen nur alle 1/50s aber ähnlich flott, klingt es furchtbar. Da es nicht 16 Änderungen sind sondern vielleicht 2 oder 3.

Hat das schon mal jemand verwendet/ausprobiert?

Hier mal der Initialisierungscode, um einen Pokey Interrupt (den 2.) zu starten.

 lda #<pokey_interrupt_2
 sta VTIMR2
 lda #>pokey_interrupt_2
 sta VTIMR2+1

 lda 16
 ora #2                 ; erlaube pokey timer2
 sta 16

 lda #$10               ; 16 Bit Auflösung für Kanal 1&2
 sta AUDCTL

 lda #<634              ; Auf PAL 63334 / Anzahl Interrupts
 sta AUDF1
 lda #>634
 sta AUDF2

  lda #1                ; Interrupt starten
  sta STIMER

  lda #128+2            ; Pokey Interrupt 2 erlauben
  sta IRQEN
  rts

Der eigentliche Interrupt selbst: Er zählt einen Counter hoch und macht den Hintergrund schwarz oder grau. Das wandert ein wenig, weil die Interrupts nicht absolut synchron zum Screen kommen. Das OS speichert uns den Akku auf den Stack, bei RTI muss man den Akku per PLA nur wieder herstellen.

counter=203

pokey_interrupt_2
  inc counter
  lda counter
  and #1
  beq white

  lda #0             ; schwarzer Hintergrund
  sta COLBK
  sta 712

  pla                 ; Pokey Interrupt verlassen, das ist so richtig!
  rti

white
  lda #$06          ; grauer Hintergrund
  sta COLBK
  sta 712

  pla
  rti

Die Interrupts kommen auf PAL alle 1/100s also 2 pro VBI, allerdings kann man jetzt keine Musik mehr spielen, weil die Interrupts an den Pokey Registern hängen. Sobald man AUDF1 und oder AUFD2 ändert, um eine andere Frequenz zu spielen, ändert sich das Laufzeitverhalten der Interrupts.

Weiß jemand mehr?

AntwortZitat

Hallo!

Ich kann Dir bei den Pokey-Interrupts leider nicht weiterhelfen.

Aber eine Möglichkeit ist es, wenn Du die Musik nicht im VBI, sondern im DLI mehrfach aufrufst. Beispielsweise einmal zum Beginn und einmal am Ende des Bildschirmaufbaus. Theoretisch kann man sicherlich ausrechnen, an welchen Stellen die beiden DLIs ausgeführt werden müssen, um exakt immer den gleichen Zeitabstand zu haben, aber fürs Experimentieren müsste es auch ohne Berechnung gehen.

Grüße Janko

Meine Projekte findest Du hier...

AntwortZitat

Hi,

vermutlich muß man da auch auf die Priorität bei den Unterbrechungsanforderungen achten.

Während des VBI können andere Unterbrechungsanforderungen unterdrückt oder wiederrum unterbrochen werden.

CU, Erhard

Jede Info, die zu Hause auf meinem Rechner liegt habe ich unterwegs nicht verfügbar. Jede Info, die im Netz liegt finde ich nicht wieder, wenn ich sie benötige.

AntwortZitat

Man kann auch außerhalb der Interrupts im eigentlichen Programmloop die Musik abspielen. Dann kann man theoretisch jedes gewollte Abspieltempo haben. Mittels VCOUNT kann man dann sogar gut mit dem Bildschirm synchronisieren. Leider ist man dann natürlich im Programmcode etwas eingeschränkt, da man ja immer Zeit für die Musikwiedergabe abgeben muss. Wenn ich mich recht entsinne wird dies beim RMT Player von Vinscool genutzt (https://github.com/VinsCool/VUPlayer-LZSS).

PP´s of STARSOFTBerlin____github|meine Webseite|Demozoo

AntwortZitat